Many programming languages including graphical programming languages, textual programming languages and dynamically typed array-based languages, such as MATLAB® from The MathWorks, Inc. of Natick, Mass., provide support for classes and object-oriented programming. Array-based languages, such as programming language used in Microsoft Excel or the MATLAB® programming environment, are a natural choice to solve many different mathematical and scientific computing problems. Object-oriented programming languages support the concept of inheritance which allows new classes to be derived from existing classes. Providing object-oriented support in a dynamically typed array-based language supplies programmers with powerful tools for solving technical problems.
In existing programming languages, such as the JAVA programming language, meta-data is used to describe a class created within the JAVA programming language. In JAVA and in other existing languages, language syntax exists to create and manipulate instances of classes, known as objects. The JAVA language processor can only have programs create and manipulate instances of classes defined in the JAVA language. The Microsoft.NET Common Language Runtime (CLR) language processor can define meta-data that is used to describe classes defined in many different programming languages. However, code in each language must be compiled by a specialized compiler that produces CLR meta-data and the generated code by the specialized compiler has to create and manipulate objects according to very specific CLR requirements. Hence, a JAVA program cannot directly create and manipulate a CLR-defined class and vice-versa. In the aforementioned language processors, meta-data classes are primarily used to describe a class to code that needs information about the class at runtime. For example, a graphical user interface design tool may be able to examine meta-data for many graphical component classes and allow a user to choose specific controls to place in a dialog box. The aforementioned language processors require that objects conform to a common memory management and memory layout model. Meta-data are not used to describe how a class stores data because all classes must use essentially the same system for storing data. This means that it is not possible for objects belonging to different classes to use different systems and mechanisms for storing data. If a class needs to store data in a different way, then it must provide a special programming interface to access that data instead of simply using a field or property in the class. Moreover, the aforementioned JAVA programming language and CLR, like many other existing programming languages, do not provide a mechanism for extending the meta-data classes and specifying that a particular class uses meta-data classes different from the default meta-data classes. For example, all JAVA classes are represented by the JAVA meta-data class called java.lang.Class. There is no way to extend this class, add additional data or customized properties, and then specify that a particular JAVA class should use this extended meta-data class. Furthermore, existing languages do not define a direct correspondence between class definition syntax and meta-data that would enable a class definition to specify values for attributes defined in the extended meta-data classes.